package com.wuxuan.algorithm_homework.stackAndQueue;

import java.util.LinkedList;
import java.util.Queue;

/**
 * 请你仅使用一个或两个队列实现一个后入先出(LIFO)的栈，并支持普通栈的全部四种操作(push、pop、top 和 empty)
 * 实现 MyStack 类:
 * void push(int x)将元素x压入械顶。
 * int pop()移除并返回栈顶元素。
 * int top()返回栈顶元素。
 * boolean empty()如果栈是空的，返回true:否则，返回false
 */
public class MyStack {
    //top, pop O(1)
    //push: O(n)
    private final Queue<Integer> queue;

    public MyStack() {
        queue = new LinkedList<>();
    }

    public void push(int x) {
        queue.offer(x);
        int steps = queue.size() - 1;
        for (int i = 0 ; i < steps ; i++) {
            queue.offer(queue.poll());
        }
    }

    public Integer pop() {
        if (queue.isEmpty()) {
            return null;
        }
        return queue.poll();
    }

    public Integer top() {
        if (queue.isEmpty()) {
            return null;
        }
        return queue.peek();
    }

    public boolean empty() {
        return queue.isEmpty();
    }

}
